const jwt = require('jsonwebtoken')
const { User } = require('../models')
const logger = require('../utils/logger')

/**
 * 认证中间件
 * 验证请求头中的token，并将用户信息添加到req对象中
 */
module.exports = async (req, res, next) => {
  try {
    // 获取请求头中的token
    const authHeader = req.headers.authorization
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return res.status(401).json({
        success: false,
        message: '未授权，请先登录'
      })
    }

    const token = authHeader.split(' ')[1]
    if (!token) {
      return res.status(401).json({
        success: false,
        message: '无效的token'
      })
    }

    // 验证token
    const decoded = jwt.verify(token, process.env.JWT_SECRET || 'your-jwt-secret')
    
    // 查询用户信息
    const user = await User.findByPk(decoded.id)
    if (!user) {
      return res.status(401).json({
        success: false,
        message: '用户不存在'
      })
    }

    if (user.status !== 1) {
      return res.status(403).json({
        success: false,
        message: '账号已被禁用'
      })
    }

    // 将用户信息添加到req对象中
    req.user = {
      id: user.id,
      phone: user.phone,
      nickname: user.nickname,
      avatar: user.avatar,
      points: user.points,
      memberLevel: user.member_level,
      role: user.role,
      status: user.status
    }

    next()
  } catch (error) {
    logger.error('Auth middleware error:', error)
    
    if (error.name === 'JsonWebTokenError') {
      return res.status(401).json({
        success: false,
        message: '无效的token'
      })
    }
    
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({
        success: false,
        message: 'token已过期，请重新登录'
      })
    }
    
    res.status(500).json({
      success: false,
      message: '服务器错误'
    })
  }
}